#include "xsUtils.hpp"

#include <fstream>

namespace xs
{

//=================================================================================================
// load_file
//=========

bool load_file(const wchar_t *filename, File &file)
{
	std::ifstream f(filename, std::ios_base::binary);
	if(f.is_open()==false)
	{
		LOG(LL_ERR) << "Cannot found file: "<<wstr_to_str(filename)<<std::endl;
		return false;
	}
	f.seekg (0, std::ios::end);
	file.set_size(f.tellg());
	f.seekg (0, std::ios::beg);
	f.read ((char*)file.get_data(),file.get_size());
	f.close();

	LOG(LL_INF) << "File " << wstr_to_str(filename) <<" loaded"<<std::endl;

	return true;
}

//=================================================================================================
// File::File
//=========

File::File()
{
	m_size = 0;
	m_data = 0;
}

//=================================================================================================
// File::File
//=========

File::File(const u32 &filesize)
{
	m_size = filesize;
	m_data = new u8[m_size];
}

//=================================================================================================
// File::~File
//=========

File::~File()
{
	delete [] m_data;

	m_size = 0;
	m_data = 0;
}
//=================================================================================================
// File::get_data
//=========

u8* File::get_data()
{
	return m_data;
}

//=================================================================================================
// File::get_size
//=========

const u32& File::get_size()
{
	return m_size;
}

//=================================================================================================
// File::set_size
//=========

void File::set_size(const u32 &filesize)
{
	if(m_size==filesize)
		return;

	m_size = filesize;
	delete [] m_data;
	m_data = 0;

	if(m_size)
		m_data = new u8[m_size];
}

}